package org.jgs1904.apachepoidemo.utils;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddressList;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * 设置单元格下拉框选项
 *
 * @author: 默苍璃
 * @date: 2023-10-10 18:23
 */
public class MyDataValidation {

    public static void main(String[] args) throws IOException {
        dv1();
    }


    public static void dv() throws IOException {
        // 假设您已经有一个 Workbook 对象
        Workbook workbook = new HSSFWorkbook();  // or new XSSFWorkbook();
        Sheet sheet1 = workbook.createSheet("new sheet");

// 获取要应用下拉框的 Sheet 对象（假设是第一个 Sheet）
        Sheet sheet = workbook.getSheetAt(0);

// 创建一个下拉框选项的字符串数组
        String[] options = new String[]{"Option 1", "Option 2", "Option 3"};

// 创建一个 CellRangeAddressList 对象，指定被应用下拉框的单元格范围
        CellRangeAddressList addressList = new CellRangeAddressList(0, 0, 0, 0);  // 例如，选项应用于第一个单元格（A1）

// 创建下拉框数据验证规则
        DataValidationHelper validationHelper = sheet.getDataValidationHelper();
        DataValidationConstraint constraint = validationHelper.createExplicitListConstraint(options);
        DataValidation dataValidation = validationHelper.createValidation(constraint, addressList);

// 设置数据验证规则的其他属性
        dataValidation.setShowErrorBox(true);  // 是否显示错误提示框（可选）
        dataValidation.setErrorStyle(DataValidation.ErrorStyle.STOP);  // 错误样式，这里设置为阻止输入无效值
        dataValidation.createErrorBox("Invalid Value", "Please select a value from the dropdown list.");  // 错误提示框的标题和内容（可选）

// 将数据验证规则应用到指定单元格
        sheet.addValidationData(dataValidation);

// 保存 Excel 文件
        FileOutputStream fileOut = new FileOutputStream("D:\\temp\\output.xlsx");
        workbook.write(fileOut);
        fileOut.close();
    }

    public static void dv1() throws IOException {
        // 假设您已经有一个 Workbook 对象
        Workbook workbook = new XSSFWorkbook();
        Sheet sheet1 = workbook.createSheet("new sheet");

// 获取要应用下拉框的 Sheet 对象（假设是第一个 Sheet）
        Sheet sheet = workbook.getSheetAt(0);

// 创建一个下拉框选项的字符串数组
        String[] options = new String[]{"Option 1", "Option 2", "Option 3"};

// 获取要应用下拉框的列索引（假设是第一列，索引为0）
        int columnIndex = 0;

// 指定要应用下拉框的起始行和结束行（假设是第二行到第五行）
        int startRow = 1;
        int endRow = 4;

// 创建一个 CellRangeAddressList 对象，指定被应用下拉框的单元格范围
        CellRangeAddressList addressList = new CellRangeAddressList(startRow, endRow, columnIndex, columnIndex);

// 创建下拉框数据验证规则
        DataValidationHelper validationHelper = sheet.getDataValidationHelper();
        DataValidationConstraint constraint = validationHelper.createExplicitListConstraint(options);
        DataValidation dataValidation = validationHelper.createValidation(constraint, addressList);

// 设置数据验证规则的其他属性
        dataValidation.setShowErrorBox(true);  // 是否显示错误提示框（可选）
        dataValidation.setErrorStyle(DataValidation.ErrorStyle.STOP);  // 错误样式，这里设置为阻止输入无效值
        dataValidation.createErrorBox("Invalid Value", "Please select a value from the dropdown list.");  // 错误提示框的标题和内容（可选）

// 将数据验证规则应用到指定单元格范围
        sheet.addValidationData(dataValidation);

// 保存 Excel 文件
        FileOutputStream fileOut = new FileOutputStream("D:\\temp\\output1.xlsx");
        workbook.write(fileOut);
        fileOut.close();
    }

}
